Delegate হল একটি টাইপ সেফ পদ্ধতি যা কোনো মেথডকে রেফারেন্স (references) হিসেবে ব্যবহার করার সুযোগ দেয়। C#-এ Func এবং Action হল দুটি জনপ্রিয় ডেলিগেট টাইপ যা একটি মেথডকে প্যারামিটার হিসেবে গ্রহণ করে এবং তা কার্যকর করার জন্য ব্যবহৃত হয়।
Func এবং Action দুটি মেকানিজম আছে যেগুলি কোডের পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বৃদ্ধি করতে সাহায্য করে, বিশেষত যখন আপনি কোডে নির্দিষ্ট লজিক প্রেরণ করতে চান।
Func Delegate
Func ডেলিগেট একটি ধরনের ডেলিগেট যা একটি ভ্যালু রিটার্ন করে এবং একটি অথবা একাধিক ইনপুট প্যারামিটার গ্রহণ করতে পারে। এটি ০ থেকে ১৬ পর্যন্ত প্যারামিটার নিতে পারে এবং অবশ্যই একটি রিটার্ন ভ্যালু প্রদান করবে।
১. Func Delegate এর গঠন
Func<in T1, in T2, ..., TResult> funcName;
- T1, T2,...: ইনপুট প্যারামিটার টাইপ।
- TResult: রিটার্ন টাইপ।
২. উদাহরণ: Func Delegate
এখানে একটি Func ডেলিগেট ব্যবহার করা হয়েছে যা দুটি সংখ্যার যোগফল প্রদান করবে:
using System;
class Program
{
static void Main()
{
// Func ডেলিগেট তৈরি, দুটি ইনপুট প্যারামিটার (int) এবং একটি রিটার্ন টাইপ (int)
Func<int, int, int> addNumbers = (a, b) => a + b;
// Func ডেলিগেট ব্যবহার
int result = addNumbers(5, 10);
Console.WriteLine($"The sum of 5 and 10 is: {result}");
}
}
আউটপুট:
The sum of 5 and 10 is: 15
এখানে, Func<int, int, int> একটি ডেলিগেট যা দুটি int ইনপুট নেবে এবং একটি int রিটার্ন করবে।
৩. অনেক প্যারামিটার সহ Func
Func ডেলিগেট অনেক ইনপুট প্যারামিটারও গ্রহণ করতে পারে (যেমন ১টি, ২টি, ৩টি বা তারও বেশি) এবং একটি রিটার্ন টাইপও থাকতে পারে।
Func<int, int, int, int> multiplyNumbers = (a, b, c) => a * b * c;
int result = multiplyNumbers(2, 3, 4);
Console.WriteLine($"The product is: {result}");
আউটপুট:
The product is: 24
এখানে, Func<int, int, int, int> তিনটি ইনপুট প্যারামিটার এবং একটি int রিটার্ন করেছে।
Action Delegate
Action ডেলিগেটের ক্ষেত্রে কোনো রিটার্ন ভ্যালু থাকে না। এটি শুধুমাত্র ইনপুট প্যারামিটার নেয় (০ থেকে ১৬টি ইনপুট প্যারামিটার) এবং কোনো রিটার্ন ভ্যালু প্রদান করে না।
১. Action Delegate এর গঠন
Action<in T1, in T2, ...> actionName;
- T1, T2,...: ইনপুট প্যারামিটার টাইপ। কোনো রিটার্ন টাইপ থাকে না।
২. উদাহরণ: Action Delegate
এখানে একটি Action ডেলিগেট ব্যবহার করা হয়েছে, যা দুটি প্যারামিটার নেবে এবং কনসোলে মেসেজ প্রিন্ট করবে।
using System;
class Program
{
static void Main()
{
// Action ডেলিগেট তৈরি, দুটি ইনপুট প্যারামিটার (int)
Action<int, int> printSum = (a, b) => Console.WriteLine($"Sum: {a + b}");
// Action ডেলিগেট ব্যবহার
printSum(10, 20);
}
}
আউটপুট:
Sum: 30
এখানে Action<int, int> একটি ডেলিগেট যা দুটি int ইনপুট প্যারামিটার নেয় এবং কোনো রিটার্ন ভ্যালু প্রদান না করে কেবল কনসোলে ফলাফল প্রিন্ট করে।
৩. Action ব্যবহার করে কিছু কাজ করা
Action ডেলিগেট ব্যবহার করা যেতে পারে বিভিন্ন কাজ (side effects) করার জন্য, যেমন ফাইল লেখার কাজ, UI আপডেট করা ইত্যাদি। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Action ডেলিগেট ব্যবহার করে একটি ডেটা কনসোলে প্রিন্ট করা হয়েছে:
Action<string> printMessage = (message) => Console.WriteLine(message);
printMessage("Hello, this is an Action delegate example!");
আউটপুট:
Hello, this is an Action delegate example!
Func এবং Action এর মধ্যে পার্থক্য
| ফিচার | Func | Action |
|---|---|---|
| রিটার্ন ভ্যালু | একটি রিটার্ন ভ্যালু থাকে। (TResult) | কোনো রিটার্ন ভ্যালু নেই। |
| ইনপুট প্যারামিটার | ১ থেকে ১৬টি ইনপুট প্যারামিটার নিতে পারে। | ০ থেকে ১৬টি ইনপুট প্যারামিটার নিতে পারে। |
| ব্যবহার | সাধারণত গণনা বা কিছু মান বের করার জন্য ব্যবহৃত। | কোন নির্দিষ্ট কাজ (side effects) করার জন্য ব্যবহৃত। |
যখন Func বা Action ব্যবহার করবেন?
- Func ব্যবহার করুন যখন আপনাকে কোনো মান (result) ফেরত দেওয়ার প্রয়োজন হয়, যেমন গণনা বা ডেটা প্রক্রিয়াকরণ।
- Action ব্যবহার করুন যখন আপনি কোনো নির্দিষ্ট কাজ বা কার্যকরী কাজ সম্পাদন করতে চান, যেমন কনসোলে কিছু প্রিন্ট করা বা UI পরিবর্তন করা, কিন্তু রিটার্ন ভ্যালুর প্রয়োজন নেই।
উপসংহার
Func এবং Action ডেলিগেট C#-এ ফাংশনাল প্রোগ্রামিং ধারণা প্রয়োগের জন্য অত্যন্ত কার্যকরী। Func ডেলিগেট একটি রিটার্ন ভ্যালু প্রদান করে, যেখানে Action কোনো রিটার্ন ভ্যালু ছাড়াই নির্দিষ্ট কার্য সম্পাদন করতে ব্যবহৃত হয়। এই দুই ডেলিগেটের ব্যবহার কোডে আরো নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা আনে।